En el ámbito del análisis espacial en R, se pueden clasificar los datos espaciales en función del modelo de datos (Lovelace, Nowosad, and Muenchow 2019). Se pueden distinguir dos tipos de modelos de datos:
Este modelo está basado en puntos georeferenciados. Los puntos pueden representar localizaciones específicas, como la localización de edificios:
library(ggplot2)
library(sf)
# Hospitales en Toledo segun Eurostat
hosp_toledo <- st_read("data/hosp_toledo.geojson", quiet = TRUE)
ggplot() +
geom_sf(
data = hosp_toledo, aes(fill = "Centros Sanitarios"),
color = "blue"
) +
labs(
caption = "Datos: Eurostat",
title = "Hospitales y Centros de Salud en Toledo",
fill = ""
) +
theme_minimal() +
theme(legend.position = "bottom")
Estos puntos también pueden estar conectados entre sí, de manera que formen geometrías más complejas, como líneas y polígonos:
tajo <- st_read("data/tajo_toledo.shp", quiet = TRUE)
toledo <- st_read("data/toledo_ciudad.gpkg", quiet = TRUE)
ggplot(toledo) +
geom_sf(fill = "cornsilk2") +
geom_sf(data = tajo, col = "lightblue2", lwd = 2, alpha = 0.7) +
geom_sf(data = hosp_toledo, col = "blue") +
coord_sf(
xlim = c(-4.2, -3.8),
ylim = c(39.8, 39.95)
) +
theme_minimal() +
labs(title = "Ciudad de Toledo")
En el ejemplo anterior, el río Tajo está representado como una línea (sucesión de puntos unidos entre sí) y la ciudad de Toledo como un polígono (línea de puntos cerrada formando un continuo). A modo ilustrativo, podemos observar la descomposición en puntos de todos los datos espaciales representados en el gráfico anterior.
Los datos ráster son datos representandos en una rejilla rectangular de píxeles (denomindada matriz) que se puede visualizar en diversos dispositivo de representación. El caso más cotidiano de un ráster es una fotografía, donde la imagen se representa como una serie de celdas, determinadas por la resolución de la imagen (número total de píxeles, determinados como nº de píxeles en cada fila por nº de píxeles en cada columna) y el color que presenta cada uno de estos píxeles.
En el ámbito de los datos espaciales, la definición es muy similar. Un archivo ráster está formado por una malla regular de píxeles georreferenciada:
En el ejemplo anterior, el archivo ráster tiene únicamente una capa (ESP_alt). Eso implica que cada píxel tiene asociado un único valor, en este caso, la altitud media del terreno observada en cada píxel o celda.
| x | y | ESP_alt |
|---|---|---|
| -5.391667 | 40.3 | 1498.312 |
| -5.358333 | 40.3 | 1701.125 |
| -5.325000 | 40.3 | 1825.312 |
| -5.291667 | 40.3 | 1739.062 |
| -5.258333 | 40.3 | 1756.062 |
| -5.225000 | 40.3 | 1659.688 |
| -5.191667 | 40.3 | 1607.375 |
| -5.158333 | 40.3 | 1809.562 |
| -5.125000 | 40.3 | 1874.625 |
| -5.091667 | 40.3 | 1691.312 |
| -5.058333 | 40.3 | 1511.500 |
| -5.025000 | 40.3 | 1207.000 |
| -4.991667 | 40.3 | 1160.125 |
| -4.958333 | 40.3 | 1396.125 |
| -4.925000 | 40.3 | 1624.125 |
Los rásters pueden contener varias capas (o layers), de manera que cada píxel puede tener asociados varios valores. Volviendo al ejemplo de la fotografía, en un modelo simple de color RGB cada píxel lleva asociado 3 valores (rojo, verde o azul), de manera que al combinar las tres capas se puede definir un color distinto en cada píxel.
En el siguiente ejemplo vamos a usar una imagen de mapa georreferenciada, como las proporcionadas por servicios de mapas online, para analizar su composición.
tile <- rast("data/Toledo_multi_tile.tiff")
plotRGB(tile, mar = c(0, 0, 2, 0), main = "Provincia de Toledo")
plot(st_geometry(Tol_prov), add = TRUE)
El ráster se puede descomponer en las tres capas RGB mencionadas anteriormente:
| x | y | lyr.1 | lyr.2 | lyr.3 |
|---|---|---|---|---|
| -5.466412 | 40.34418 | 215.2128 | 208.1061 | 190.5410 |
| -5.463875 | 40.34418 | 228.0369 | 223.1854 | 211.2115 |
| -5.461338 | 40.34418 | 229.3495 | 224.3414 | 213.4325 |
| -5.458800 | 40.34418 | 215.8592 | 208.8660 | 191.2922 |
| -5.456263 | 40.34418 | 219.2696 | 212.8231 | 196.6812 |
| -5.453725 | 40.34418 | 235.0954 | 231.4222 | 222.4115 |
| -5.451188 | 40.34418 | 240.3514 | 237.9094 | 231.4736 |
| -5.448651 | 40.34418 | 237.2358 | 233.7561 | 226.2005 |
| -5.446113 | 40.34418 | 229.9570 | 225.3262 | 214.6201 |
| -5.443576 | 40.34418 | 226.7812 | 221.6796 | 209.2929 |
| -5.441038 | 40.34418 | 222.3593 | 216.5022 | 202.0188 |
| -5.438501 | 40.34418 | 220.9312 | 214.9060 | 200.0306 |
| -5.435964 | 40.34418 | 224.7755 | 219.2661 | 206.2156 |
| -5.433426 | 40.34418 | 222.0479 | 216.0124 | 201.6103 |
| -5.430889 | 40.34418 | 225.0516 | 219.8074 | 207.0263 |
Y cada capa se puede graficar de manera independiente
plot(tile$lyr.1,
main = "Raster tile: Layer 1",
col = hcl.colors(255, "Reds")
)
plot(tile$lyr.2,
main = "Raster tile: Layer 2",
col = hcl.colors(255, "Greens")
)
plot(tile$lyr.3, main = "Raster tile: Layer 3", col = hcl.colors(255, "Blues"))